﻿#ifndef DAQ_IPC_UTILS_H
#define DAQ_IPC_UTILS_H

#include <QString>
#include <QSharedPointer>
#include <string>
#include <vector>
#include "libdaq/device/DAQ206/DAQ206.h"

QString SampleRateIntToQString(int sample_rate);
int QStringToSampleRate(const QString &str);

bool String2Mac(const std::string& str, std::vector<uint8_t>& mac_address);
bool Mac2String(const std::vector<uint8_t>& mac_address, std::string& str);

bool IpAddress2String(const std::vector<uint8_t>& address, std::string& str);
bool String2IpAddress(const std::string& str, std::vector<uint8_t>& address);

double QStringToVoltage(const QString& str);

QString GenerateRandomMacAddress();
QString DecimalToHex(long long decimalValue); // 十进制转十六进制
long long HexToDecimal(const QString &hexString); // 十六进制转十进制
std::vector<uint8_t> hexStringToBytes(const QString &hexString); // 十六进制字符串转字节数组
long long bytesToLongLong(const std::vector<uint8_t>& bytes); // 字节数组转long long
QString longLongToQString(long long num); // long long转QString

QSharedPointer<libdaq::device::LockzhinerBaseDevice> NewDevice(); // 创建一个新设备实例

bool IsIPAddress(const QString &str); // 判断是否为IP地址
QString Uint8ToString(const uint8_t &value); // 转换uint8_t到字符串

int GetTriggerChannelDataLength(const QString& sample_rate, uint32_t data_length); // 获取通道触发模式下真正下发的数据长度
int GetTriggerChannelDataLength(uint32_t sample_rate, uint32_t data_length); // 获取通道触发模式下真正下发的数据长度

QString GetMaxSampleRate(); // 获取当前设备的最大采样率


#endif //DAQ_IPC_UTILS_H
